<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of comun
 *
 * @author peregrina
 */

include "basededatos.php";

abstract class comun{
    //Variables
    public $menu, $mensaje, $pie, $error, $bdd;
    public $from, $tipo, $id, $iph;
    public $HTML = array();
    
    //Construir las cosas que se van a ocupar
    function __construct($from, $tipo, $id){
        
        //Pasamos la info
        $this->from = $from;
        $this->tipo = $tipo;
        $this->id = $id;
        
        
        //Base de datos
        $this->bdd = new basededatos();
        
        $this->iph = $GLOBALS["iph"]-1;
        
        
        //Creamos la base del HTML a retornar con imiprimi_contenido();
        $this->HTML = array("todo" => "", "titulo" => "", "encabezado" => "", 
            "mensaje"=>"","cuerpo" => "", "pie" => "");
        
        
        //Autorización
        $this->autorizacion($from, $tipo, $id);
        
        //Menu del sitio
        $menu = array("Sesión"=>"?uid=sesion","Páginas"=>"?pid","Foros"=>"?fid","Archivos"=>"?aid","Buscar"=>"?buscar");
        if($GLOBALS["aut"]>2){
            $menu = array("Usuarios"=>"?uid","Sesión"=>"?uid=sesion","Páginas"=>"?pid","Foros"=>"?fid","Archivos"=>"?aid","Buscar"=>"?buscar");
        }
        $this->menu = $this->menu($menu);
        
        //Mensaje
        $mensaje = (empty($_POST["mensaje"])) ? "" : $_POST["mensaje"];
        $this->mensaje = "<div class='mensaje'>$mensaje</div>";
        
        //Pie de página
        $this->pie = "<div class=\"pie\">".$GLOBALS["pie"]."</div>";
        
        //Cargamos el contenido
        $this->cargar($id);
        
    }
    
    //Define que hacer cuando obtenemos diferentes POST y GET
    function cargar($id){
        //Si si tenemos el ID
        if(!empty($id) && $this->id!="crear" && $this->id!="borrar"){
            $this->id_definido();
        }
        
        //Si no
        else{
            //Mostrando lista
            if($id!="crear" && $id!="borrar"){
                $this->id_no_definido();
            }
            //Creando contenido
            if($id=="crear"){
                //Si es autor
                if($GLOBALS["aut"]>0){
                    //Mostrar forma
                    if(empty($_POST["guardando"])){
                        if(empty($_POST["editar"])){
                            $this->crear();
                        }
                        else{
                            $this->editar();
                        }
                    }
                    //Guardar
                    else{
                        $this->guardar();
                    }
                }
                //Quiere guardar o crear pero no es Autor
                else{
                    $this->autor();
                }
            }
            if($id=="borrar" && $GLOBALS["aut"]>0){
                //Borramos
                $this->borrar($this->from, $this->tipo, $_POST["editar"]);
            }
        }
        
    }
    
    //Borrado generico
    function borrar($from,$tipo,$id){
        //Borramos la página
        $res = $this->bdd->insert("delete from $from where {$tipo}ID=$id;");
        if($res){
            //Retornar al indice
            $this->redirect("{$tipo}id");
        }
        else{
            //Hubo un error
            $error = urlencode("La operación no se pudo completar debido a una restricción");
            $this->redirect("{$tipo}id={$id}&error={$error}");
        }
        
    }
    
    //Escribe en la variable global $aut, 0=Visitante, 1=Autor, 2=El mismo autor, 3=Administrador
    function autorizacion($from, $tipo, $id){
        global $aut;
        //Cargamos información básica
        if(!empty($_COOKIE["Autor"])){
            $aut=1;
        }
        if(!empty($_COOKIE["Autor"])){
            //Si el autor del contenido es el mismo que el autor registrado MDBB_JOIN
            $res = $this->bdd->query("select u.Nombre from $from p join Usuarios u on p.Autor=u.UID where p.{$tipo}ID='$id';");
            
            if(!empty($res) && !empty($_COOKIE["Autor"]) && ($res["Nombre"]==$_COOKIE["Autor"])){
                $aut=2;
            }
            //Si eres administrador
            $adm = $this->bdd->query("select Administrador from Usuarios where Nombre='{$_COOKIE["Autor"]}';");
            if($adm["Administrador"]=="1"){
                $aut=3;
            }
        }
        
    }
    
    function menu($items){
        //Hacemos el menu basandonos en los encabezados
        $menu ='<div class="menu"><ul>';
        foreach( $items as $clave=>$valor){
            $menu .= "<li><a href=\"$valor\">$clave</a></li>";
        }
        $menu .="</ul></div>";
        return $menu;
    }
    
    function redirect($a){
        $GLOBALS["HTTP_Status"] = "303";
        $GLOBALS["HTTP_Redirect"] = "?$a";
    }
    
    function sig_ant($cual,$tipo, $from, $id){
        if($cual == true){
            //Ver si hay uno despues
            $query = "select {$tipo}ID, Nombre from $from where {$tipo}ID>'$id' order by {$tipo}ID limit 1;";
            $res = $this->bdd->query($query);
            if(!empty($res)){
                //Si hay mas
                $ret=" <a href=\"?".$tipo."id&i=".$res[$tipo."ID"]."\">Siguiente&gt;&gt;</a>";

            }
        }
        else{
            //Ver si hay uno antes
            $query = "select * from (select {$tipo}ID, Nombre from $from where {$tipo}ID<'$id' order by {$tipo}ID desc limit {$GLOBALS["iph"]}) Paginas order by {$tipo}ID asc;";
            $res = $this->bdd->multiquery($query);
            if(!empty($res)){
                //Si hay anteriores, ir al último, 
                $ret = "<a href=\"?".$tipo."id&i=".$res[0][$tipo."ID"]."\">&lt;&lt;Anterior</a> ";
            }
        }
        //Limpiar
        $ret = (!empty($ret))?$ret:"";
        //Retornar
        return $ret;
    }
    
    //Esta función obtiene todo el HTML
    function contenido(){
        //Variables locales
        $menu = $this->menu;
        $error = (empty($_GET["error"]))?"":"<div class=\"error\">{$_GET["error"]}</div>";
        $pie = $this->pie;
        $mensaje = $this->mensaje;
        
        //Total
        $this->HTML["todo"] = <<<FIN
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
                      
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
    <head>

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>{$this->HTML['titulo']}</title>
        <link rel="stylesheet" href="estilo/estilo.css" />
        <script type="text/javascript" src="estilo/utils.js"></script>
        <script type="text/javascript" src="estilo/nicEdit.js"></script>
        <script type="text/javascript">bkLib.onDomLoaded(function() { editor1 = new nicEditor({fullPanel : true}).panelInstance('editor'); });</script>
    </head>
    <body>
        {$menu}
        {$mensaje}
        <div class="cuerpo">
            {$this->HTML["cuerpo"]}
            
            {$error}
        </div>
        {$pie}
        
    </body>
</html>
FIN;
        return $this->HTML["todo"];
        
    }
    
    //
    abstract function id_definido();
    
    //
    abstract function id_no_definido();

    //
    abstract function crear();
    
    //
    abstract function guardar();
    
    //
    abstract function editar();
}

?>
